#if !defined(_PARAMETER_H)
#define _PARAMETER_H

#include "SType.h"
#include "TypeDescriptor.h"
#include "Utility.h"

CREATE_ALIAS( Parameter );

/**
 * Class to store information about a command parameter.
 */
class DECLARATION_DLL Parameter
{

protected:
	
	/** The name of the parameter. */
	string name;

	/** The description of the parameter. */
	string description;

	/** The type of the parameter. */
	SType type;

	/** The type descriptor of the parameter (valid only if type is complex). */
	TypeDescriptorSp typeDescriptor;

	/**
	 * Create a Parameter of simple type.
	 */
	Parameter(string name, string description, SType type);

	/**
	 * Create a Parameter of complex type.
	 */
	Parameter(string name, string description, TypeDescriptorSp typeDescriptor);

public:

	/**
     * Get the parameter name.
	 */
	virtual string GetName()
	{
		return name;
	}

	/**
	* Get the parameter description.
	*/
	virtual string GetDescription()
	{
		return description;
	}
	
	/**
	* Get the parameter type.
	*/
	virtual SType GetType()
	{
		return type;
	}

	/**
	* Get the name of the type described by the parameter (is a Fully Qualified Name).
	*/
	string GetFullyQualifiedTypeName();

	/**
	* Get the parameter type descriptor (valid only if type is complex).
	*/
	virtual TypeDescriptorSp GetTypeDescriptor()
	{
		return typeDescriptor;
	}

};

#endif  //_PARAMETER_H
